package hao.test.motan.api;
import java.util.List;

import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.jboss.resteasy.annotations.Body;

import hao.test.motan.api.model.User;

/**
 * Created by zhanglei28 on 2017/8/30.
 */
@Path("/rest")
public interface RestfulService {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    List<User> getUsers(@QueryParam("uid") int uid);

    @GET
    @Path("/primitive")
    @Produces(MediaType.TEXT_PLAIN)
    String testPrimitiveType();

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    Response add(@FormParam("id") int id, @FormParam("name") String name);
    
    /**
     * http://localhost:8004/rest/add2?id=4321&name=abcd
     * json:{"id": 1234,"name": "name1234"}
     * 不会使用 uri的参数
     * @param user
     * @return
     */
    @POST
    @Path("/add2")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Response add2(User user);
    
    /**
     * http://localhost:8004/rest/add2?id=4321&name=abcd
     * json:{"id": 1234,"name": "name1234"}
     * 会使用 uri的参数,user对象使用json
     * @param user
     * @return
     */
    @POST
    @Path("/add3")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    Response add3(@QueryParam("id") int id, @QueryParam("name") String name,User user);
    
    /**
     * 入参单个参数须添加注解，否则会报错
     * @Consumes json 可以不指定
     * @param id
     * @param name
     * @param user
     * @return
     */
    @POST
    @Path("/add4")
    @Produces(MediaType.APPLICATION_JSON)
    Response add4(@QueryParam("id")Integer id,@QueryParam("name")String name, User user);

    @GET
    @Path("/exception")
    @Produces(MediaType.APPLICATION_JSON)
    void testException();
}
